/**
 * @author zhouheng
 * @date 2022年02月07日 21:52
 */

package com.atguigu.gulimall.product.exception;

import com.atguigu.common.utils.R;
import com.google.common.collect.Maps;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import lombok.extern.java.Log;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

@RestControllerAdvice
@Slf4j
public class GlobalControllerAdvice {
    @ExceptionHandler(value = MethodArgumentNotValidException.class)
    public R ExceptionHandler(MethodArgumentNotValidException e) {
        log.error("数据解析出现异常：{}， 异常类型：{}", e.getMessage(), e.getClass());
        List<FieldError> fieldErrors = e.getBindingResult().getFieldErrors();
        Map<String, String> errParamMap = Maps.newHashMap();
        fieldErrors.stream().forEach(t -> {
           errParamMap.put(t.getField(), t.getDefaultMessage());
        });

        return R.error(400, "参数解析校验失败").put("data", errParamMap);
    }

//    @ExceptionHandler(value = Throwable.class)
//    public R ExceptionHandler(Throwable throwable) {
//
//        return R.error(500, "未知的异常");
//    }
//
//    @ExceptionHandler(value = Exception.class)
//    public R ExceptionHandler(Exception ex) {
//
//        return R.error(500, "未知的异常");
//    }
}
